资料馆里面有关经验封顶的解释在这里,原帖中的猜想是,中间数据若超过7FFFFFFF(十进制2147483647),会导致经验封顶,但事实上数据的计算是分步取整的,这种猜想,很显然是与实际不符合的。
而根据这里查询硬代码的结果是,经验值封顶的判定发生于惩罚之前,当经验值超过7FFFFF(十进制8388607)便会导致经验封顶。
对于该作者的说法,我依然保持着怀疑态度,不过硬代码经检查没有任何问题,封顶数据确为7FFFFF(十进制8388607)。 目前我认为资料馆的经验计算流程存在问题,个人猜想的实际经验计算流程为:
1.基本经验 2.经验分配 3.经验封顶 4.经验惩罚 5.经验加成
结盟经验相关 加成exp=exp*(player-1)*89/256 代码: 6FC9E054 imul eax, esi 6FC9E057 imul eax, 59h 6FC9E063 sar eax, 8
封顶经验相关 封顶exp=min(exp,7FFFFFh) 代码: 6FC9B3E0 push esi 6FC9B3E1 mov esi, eax 6FC9B3E3 cmp esi, 7FFFFFh 6FC9B3E9 jle short 6FC9B3EB mov esi, 7FFFFFh
人怪惩罚相关 [clvl<25] clvl - mlvl = 0-5 256 1.00 mlvl - clvl = 0-5 256 1.00 6 207 0.81 6 225 0.88 7 159 0.62 7 174 0.68 8 110 0.43 8 92 0.36 9 61 0.24 9 38 0.15 10 13 0.05 10 5 0.02 [clvl>=25] clvl - mlvl = 0-5 256 1.00 mlvl - clvl > 0 clvl / mlvl 6 207 0.81 7 159 0.62 8 110 0.43 9 61 0.24 10 13 0.05 代码: 6FCC4193 SUB ECX,EAX 6FCC4195 CMP ECX,0B 6FCC4198 JL SHORT 6FCC419A MOV ECX,0A 6FCC4230 CMP EBP,19 6FCC4233 JL SHORT 6FCC423E SUB EAX,EBP 6FCC4240 CMP EAX,0B 6FCC4243 JL SHORT 6FCC4245 MOV EAX,0A 6FCC424A MOV EDX 6FCC4251 CMP EDX,100 6FCC4257 JE SHORT
等级惩罚相关 1.clvl<70 且 exp<100000h,exp=[(exp*1024)/1024] 2.clvl<70 且 exp>=100000h,exp=[exp/1024]*1024 3.clvl>=70 且 exp<200000h,exp=[(exp*expratio)/1024] 4.clvl>=70 且 exp>=200000h,exp=[exp/1024]*expratio 代码: 6FCC3032 SAR ESI,CL 6FCC3034 IMUL ESI,EDI 6FCC3037 JMP SHORT 6FCC3039 IMUL EDI,ESI 6FCC303C SAR EDI,CL 6FCC303E MOV ESI,EDI
经验加成相关 1.exp>100000h,exp=[exp/100]*bonus+exp 2.exp<=100000h,exp=[(exp*bonus)/100]+exp 代码: 6FCC3054 CMP ESI,100000h 6FCC308B IMUL EAX,ECX 6FCC3090 CMP ECX,10000h 6FCC30B4 MOV EAX 6FCC30C7 IMUL EAX,ESI 6FCC30CC IMUL ECX,ESI 6FCC30CF MOV EAX 6FCC30E2 ADD ESI,EAX
PS:为了证实自己的猜想,我进行了无聊的实际测试,反正新赛季也是一个漫长的旅程。。。
[ 本贴由 等风来 在 01-26 23:06 编辑过. ] |